% vim:encoding=utf8 ft=tex sts=2 sw=2 et:

\documentclass{classrep}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{epstopdf}
\usepackage{subfigure}
\usepackage{float}
\usepackage{amsmath,amssymb,amsfonts}
\usepackage{listings}

\studycycle{Informatyka, studia dzienne, mgr II st.}
\coursesemester{II}

%\coursename{Angelologia teoretyczna i stosowana}
\coursename{Komputerowe Systemy Rozpoznawania}
\courseyear{2011/2012}

\courseteacher{Adam Niewiadomski}
\coursegroup{poniedziałek, 12:30}

\author{%
  \studentinfo{Mateusz Papiernik}{} \and
  \studentinfo{Krzysztof Rychlicki-Kicior}{}
}

\title{Zadanie 2: Lingwistyczne podsumowania baz danych}

\begin{document}
\maketitle

\begin{abstract}
W sprawozdaniu udokumentowano implementację aplikacji realizującej lingwistyczne podsumowania baz danych z użyciem zbiorów rozmytych typu 1 i typu 2, a także przedstawiono wyniki przykładowych podsumowań dla wybranych w toku realizacji zadania przykładowej bazy danych.
\end{abstract}

\section{Opis bazy danych}

Do realizacji zadania i badań przeprowadzonych w dalszej części sprawozdania wykorzystano bazę danych informacji pogodowych opisujących sytuację pogodową nad Łodzią na przestrzeni lat 2008-2010 zebraną przez Weather Underground (http://www.wunderground.com).

Baza danych zawiera 50 tys. krotek opisujących warunki pogodowe z użyciem 8 liczbowych wskaźników możliwych do podsumowania z użyciem ciągłych funkcji przynależności dla zbiorów rozmytych. Wskaźniki te to pora dnia (wyrażany w minutach, które upłynęły od północy), temperatura (w stopniach Celsiusza), temperatura punktu rosy (w stopniach Celsiusza), wilgotność (wyrażana w procentach), ciśnienie atmosferyczne (hPa), widoczność (w kilometrach), szybkość wiatru (w kilometrach na godzinę) oraz kierunek wiatru (w stopniach -- zakres od 0 do 360 stopni).

Przykładowe kilka krotek ze zbioru danych:

\begin{table}[H]
\begin{center}
\begin{tabular}{|l|l|l|l|l|l|l|l|}
\hline
Pora & Temp. & p. rosy & Wilg. & Ciśn. & Widoczn. & Prędk. wiatru & Kier. wiatru\\ \hline
0 & 10.0 & 8.0 & 87 & 1005 & 10.0 & 14.8 & 200 \\
30 & 10.0 & 8.0 & 87 & 1004 & 10.0 & 11.1 & 190  \\
60 & 10.0 & 8.0 & 87 & 1004 & 10.0 & 9.3 & 190  \\
90 & 10.0 & 8.0 & 87 & 1003 & 10.0 & 13.0 & 190  \\
120 & 10.0 & 7.0 & 82 & 1003 & 10.0 & 11.1 & 190  \\
150 & 10.0 & 7.0 & 82 & 1002 & 10.0 & 9.3 & 200  \\
180 & 10.0 & 8.0 & 87 & 1002 & 10.0 & 13.0 & 200  \\
210 & 10.0 & 8.0 & 87 & 1002 & 10.0 & 16.7 & 200  \\
240 & 10.0 & 8.0 & 87 & 1002 & 10.0 & 16.7 & 210  \\
270 & 10.0 & 9.0 & 94 & 1001 & 8.0 & 18.5 & 210  \\
300 & 10.0 & 9.0 & 94 & 1001 & 9.0 & 18.5 & 210 \\
330 & 10.0 & 9.0 & 94 & 1001 & 8.0 & 22.2 & 210 \\
360 & 10.0 & 9.0 & 94 & 1000 & 8.0 & 18.5 & 210 \\
390 & 10.0 & 9.0 & 94 & 1000 & 10.0 & 20.4 & 210  \\
420 & 10.0 & 9.0 & 94 & 1000 & 10.0 & 20.4 & 210  \\
450 & 10.0 & 9.0 & 94 & 999 & 8.0 & 20.4 & 210  \\
480 & 10.0 & 9.0 & 94 & 999 & 9.0 & 25.9 & 210  \\
510 & 10.0 & 9.0 & 94 & 999 & 10.0 & 24.1 & 220 \\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Przykładowe krotki z wybranej bazy danych użytej do podsumowań}
\end{center}
\end{table}

Wybrana baza danych pozwala na tworzenie rozbudowanych podsumowań zawierających zarówno kwalifikatory, jak i sumaryzatory złożone, przy jednoczesnym zachowaniu przydatności tak uzyskanych podsumowań --- łączenie wybranych cech jest z punktu widzenia wartości informacji rozsądne.

\section{Diagramy klas}

Diagramy klas pokazujące strukturę obiektowej biblioteki do obliczeń opartych o zbiory rozmyte typu 1 oraz typu 2, a także do podsumowań lingwistycznych z wykorzystaniem tych zbiorów, podzielone zostały na kilka mniejszych diagramów dla zwiększenia czytelności. Oddzielnie przedstawione zostały klasy związane bezpośrednio ze zbiorami rozmytymi, oddzielnie z funkcjami przynależności, oddzielnie klasy odpowiedzialne za realizację norm trójkątnych, a także oddzielnie pakiet klas związany z podsumowaniami lingwistycznymi.

Diagramy przedstawiono na rysunkach [1, 2, 3, 4].

\begin{figure}[H]
\begin{center}
\includegraphics[width=150mm]{sets.png}
\caption{\label{fig:sets}Diagram klas pakietu implementującego zbiory rozmyte.}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
\includegraphics[width=150mm]{norms.png}
\caption{\label{fig:sets}Diagram klas pakietu implementującego normy trójkątne.}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
\includegraphics[width=150mm]{memberships.png}
\caption{\label{fig:sets}Diagram klas pakietu implementującego funkcje przynależności.}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
\includegraphics[width=150mm]{linguistics.png}
\caption{\label{fig:sets}Diagram klas pakietu implementującego podsumowania lingwistyczne.}
\end{center}
\end{figure}

\section{Wybrane szczegóły implementacji}

Jednym z wartych wspomnienia fragmentów implementacji jest sposób generowania podsumowań łączonych z użyciem sumaryzatorów/kwalifikatorów typu 1 i typu 2. W toku implementacji zdecydowaliśmy się generować podsumowania jednolitego typu --- albo typu 1, albo typu 2. W przypadku, gdy pośród zbiorów będących cześcią zmiennych lingwistycznych użytych do podsumowań, między zbiorami typu 1 zostanie znaleziony zbiór typu 2, mechanizm podsumowań zakłada użycie podsumowań typu 2. W tym też celu wszystkie zbiory rozmyte typu 1 są konwertowane do zbiorów typu 2 zgodnie z [1]. Konwersja została zrealizowana z użyciem następującej metody:

\begin{lstlisting}[caption={Konwersja zbioru typu 1 na zbiór typu 2},label=lst:lst2,numbers=left,numberstyle=\tiny,keywordstyle={\color{black}\bfseries},stringstyle=\ttfamily,showspaces=false,frame=leftline,basicstyle=\small]
public static <T> Type2DiscreteFuzzySet<T> fromType1(
  final DiscreteFuzzySet<T> set) {
	
  HashMap<Object, Object> mappings = new 
    HashMap<Object, Object>();	
		
  for (final T element : set.elements) {
    DiscreteFuzzySet<Double> innerSet = new 
      DiscreteFuzzySet<Double>(new 
        DiscreteMembershipFunction(new 
          HashMap<Object, Object>() {{ 
            put(set.value(element), 1.0); 
          }}
        ));
				
    innerSet.elements = new CrispSet<Double>() {{ 
      add((Double)set.value(element)); 
    }};

    mappings.put(set.realValue(element), innerSet);
  }
    	 
  Type2DiscreteFuzzySet<T> newSet = new 
    Type2DiscreteFuzzySet<T>(new 
      DiscreteMembershipFunction(mappings));

    newSet.elements = set.elements;
    newSet.column = set.column;

    return newSet;
}
\end{lstlisting}

Warta wspomnienia jest również klasa \emph{SummaryFactory}, która zajmuje się generowaniem wszystkich możliwych kombinacji podsumowań na podstawie dostarczonych zmiennych lingwistycznych i kwantyfikatorów.

\begin{lstlisting}[caption={Konwersja zbioru typu 1 na zbiór typu 2},label=lst:lst2,numbers=left,numberstyle=\tiny,keywordstyle={\color{black}\bfseries},stringstyle=\ttfamily,showspaces=false,frame=leftline,basicstyle=\small]
SummaryFactory.clear();
SummaryFactory.addVariable(var_s);
SummaryFactory.addVariable(var_s2);
SummaryFactory.addVariable(var_s3);

SummaryFactory.addQuantifier(quantifier1);
SummaryFactory.addQuantifier(quantifier2);
SummaryFactory.addQuantifier(quantifier3);

SummaryFactory.qualifiers.add("humidity");
SummaryFactory.summarizers.add("temperature");

Summary<WeatherRecord> summaries = SummaryFactory.getSummaries();
\end{lstlisting}

Dzięki tej klasie generowanie definiowanie parametrów podsumowań nie wymaga samodzielnego łączenia możliwych sumaryzatorów i kwalifikatorów celem uzyskania wszystkich możliwych podsumowań.

\section{Zrzuty ekranu z aplikacji}

\begin{figure}[H]
\begin{center}
\includegraphics[width=120mm]{screenshots/qualifiers.png}
\caption{Ustawienia kwantyfikatorow.}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
\includegraphics[width=120mm]{screenshots/variables.png}
\caption{Ustawienia zmiennych lingwistycznych.}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
\includegraphics[width=120mm]{screenshots/setedit.png}
\caption{Edycja zbioru rozmytego dla zmiennej lingwistycznej.}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
\includegraphics[width=120mm]{screenshots/membership_edit.png}
\caption{Edycja trójkątnej funkcji przynależności.}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
\includegraphics[width=120mm]{screenshots/summary_settings.png}
\caption{Ustawienia podsumowania.}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
\includegraphics[width=120mm]{screenshots/results.png}
\caption{Wygenerowane podsumowania.}
\end{center}
\end{figure}

\begin{figure}[H]
\begin{center}
\includegraphics[width=120mm]{screenshots/savedresults.png}
\caption{Podsumowania zapisane do pliku.}
\end{center}
\end{figure}

\section{Przykładowe wygenerowane podsumowania}

\subsection{Podsumowania bez kwalifikatora -- kwantyfikator względny}

\subsubsection{Kwantyfikatory}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l|l|}
\hline
Kwantyfikator & Funkcja przynależności\\ \hline
minority & Triangular(0.0, 0.2, 0.4)\\
about half & Triangular(0.3, 0.5, 0.7)\\
majority & Triangular(0.6, 0.8, 1.0)\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Kwantyfikatory użyte w podsumowaniu}
\end{center}
\end{table}

\subsubsection{Sumaryzatory}

\textbf{Zmienna lingwistyczna TEMPERATURA}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l|l|}
\hline
Sumaryzator & Funkcja przynależności\\ \hline
average & Triangular(10.0, 15.0, 20.0)\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Sumaryzatory dla zmiennej lingwistycznej TEMPERATURA}
\end{center}
\end{table}

\textbf{Zmienna lingwistyczna HUMIDITY}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l|l|}
\hline
Sumaryzator & Funkcja przynależności\\ \hline
average & Triangular(40.0, 60.0, 80.0)\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Sumaryzatory dla zmiennej lingwistycznej HUMIDITY}
\end{center}
\end{table}

\subsubsection{Wygenerowane podsumowania}

\begin{enumerate}
\item about half records are/have average humidity
\item about half records are/have average temperature
\item about half records are/have average humidity and average temperature
\item minority records are/have average humidity
\item minority records are/have average temperature
\item minority records are/have average humidity and average temperature
\item majority records are/have average humidity
\item majority records are/have average temperature
\item majority records are/have average humidity and average temperature
\end{enumerate}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l||l||l|l|l|l|l|l|l|l|l|l|}
\hline
Lp. & T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9 & T10 & T11\\ \hline
1 & 0 & 0.67 & 0.33 & 0 & 1 & 0.6 & 1 & 0.83 & 0 & 0 & 0\\
2 & 0 & 0.7 & 0.3 & 0 & 1 & 0.6 & 1 & 0.83 & 0 & 0 & 0\\
3 & 0 & 0.68 & 0.14 & 0.04 & 0.5 & 0.6 & 1 & 0.83 & 0 & 0 & 0\\
4 & 0.83 & 0.67 & 0.33 & 0 & 1 & 0.6 & 1 & 0.83 & 0 & 0 & 0\\
5 & 0.85 & 0.7 & 0.3 & 0 & 1 & 0.6 & 1 & 0.83 & 0 & 0 & 0\\
6 & 0.26 & 0.68 & 0.14 & 0.04 & 0.5 & 0.6 & 1 & 0.83 & 0 & 0 & 0\\
7 & 0 & 0.67 & 0.33 & 0 & 1 & 0.6 & 1 & 0.83 & 0 & 0 & 0\\
8 & 0 & 0.7 & 0.3 & 0 & 1 & 0.6 & 1 & 0.83 & 0 & 0 & 0\\
9 & 0 & 0.68 & 0.14 & 0.04 & 0.5 & 0.6 & 1 & 0.83 & 0 & 0 & 0\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Wygenerowane podsumowania}
\end{center}
\end{table}

\subsection{Podsumowania bez kwalifikatora -- kwantyfikator bezwzględny}

\subsubsection{Kwantyfikatory}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l|l|}
\hline
Kwantyfikator & Funkcja przynależności\\ \hline
little & Triangular(0, 2000, 10000)\\
many & Triangular(20000, 35000, 50000)\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Kwantyfikatory użyte w podsumowaniu}
\end{center}
\end{table}

\subsubsection{Sumaryzatory}

\textbf{Zmienna lingwistyczna TEMPERATURA}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l|l|}
\hline
Sumaryzator & Funkcja przynależności\\ \hline
average & Triangular(10.0, 15.0, 20.0)\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Sumaryzatory dla zmiennej lingwistycznej TEMPERATURA}
\end{center}
\end{table}

\textbf{Zmienna lingwistyczna HUMIDITY}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l|l|}
\hline
Sumaryzator & Funkcja przynależności\\ \hline
average & Triangular(40.0, 60.0, 80.0)\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Sumaryzatory dla zmiennej lingwistycznej HUMIDITY}
\end{center}
\end{table}

\subsubsection{Wygenerowane podsumowania}

\begin{enumerate}
\item many records are/have average humidity
\item many records are/have average temperature
\item many records are/have average humidity and average temperature
\item little records are/have average humidity
\item little records are/have average temperature
\item little records are/have average humidity and average temperature
\end{enumerate}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l||l||l|l|l|l|l|l|l|l|l|l|}
\hline
Lp. & T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9 & T10 & T11\\ \hline
1 & 0 & 0.67 & 0 & 0.33 & 1 & 0.4 & ? & 0.83 & 0 & 0 & 0\\
2 & 0 & 0.7 & 0 & 0.3 & 1 & 0.4 & ? & 0.83 & 0 & 0 & 0\\
3 & 0 & 0.68 & 0 & 0.1 & 0.5 & 0.4 & ? & 0.83 & 0 & 0 & 0\\
4 & 0.22 & 0.67 & 0 & 0.33 & 1 & 0.8 & ? & 0.83 & 0 & 0 & 0\\
5 & 0.19 & 0.7 & 0 & 0.3 & 1 & 0.8 & ? & 0.83 & 0 & 0 & 0\\
6 & 0.92 & 0.68 & 0 & 0.1 & 0.5 & 0.8 & ? & 0.83 & 0 & 0 & 0\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Wygenerowane podsumowania}
\end{center}
\end{table}

\subsection{Podsumowania z kwalifikatorem -- kwantyfikator względny}

\subsubsection{Kwantyfikatory}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l|l|}
\hline
Kwantyfikator & Funkcja przynależności\\ \hline
minority & Triangular(0.0, 0.2, 0.4)\\
about half & Triangular(0.3, 0.5, 0.7)\\
majority & Triangular(0.6, 0.8, 1.0)\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Kwantyfikatory użyte w podsumowaniu}
\end{center}
\end{table}

\subsubsection{Sumaryzatory}

\textbf{Zmienna lingwistyczna TEMPERATURA}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l|l|}
\hline
Sumaryzator & Funkcja przynależności\\ \hline
average & Triangular(10.0, 15.0, 20.0)\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Sumaryzatory dla zmiennej lingwistycznej TEMPERATURA}
\end{center}
\end{table}

\subsubsection{Kwalifikatory}

\textbf{Zmienna lingwistyczna HUMIDITY}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l|l|}
\hline
Kwalifikator & Funkcja przynależności\\ \hline
low & Triangular(0.0, 20.0, 50.0)\\
average & Triangular(40.0, 60.0, 80.0)\\
high & Triangular(70.0, 80.0, 100.0)\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Kwalifikatory dla zmiennej lingwistycznej HUMIDITY}
\end{center}
\end{table}

\subsubsection{Wygenerowane podsumowania}

\begin{enumerate}
\item about half records that are/have high humidity are/have average temperature
\item about half records that are/have low humidity are/have average temperature
\item about half records that are/have average humidity are/have average temperature
\item minority records that are/have high humidity are/have average temperature
\item minority records that are/have low humidity are/have average temperature
\item minority records that are/have average humidity are/have average temperature
\item majority records that are/have high humidity are/have average temperature
\item majority records that are/have low humidity are/have average temperature
\item majority records that are/have average humidity are/have average temperature
\end{enumerate}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l||l||l|l|l|l|l|l|l|l|l|l|}
\hline
Lp. & T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9 & T10 & T11\\ \hline
1 & 0 & 0.7 & 0.3 & 0 & 1 & 0.6 & 1 & 0.83 & 0.45 & 0.7 & 1\\
2 & 0 & 0.7 & 0.37 & 0.07 & 1 & 0.6 & 1 & 0.83 & 0.9 & 0.97 & 1\\
3 & 0.1 & 0.7 & 0.42 & 0.12 & 1 & 0.6 & 1 & 0.83 & 0.67 & 0.83 & 1\\
4 & 0.92 & 0.7 & 0.3 & 0 & 1 & 0.6 & 1 & 0.83 & 0.45 & 0.7 & 1\\
5 & 0.5 & 0.7 & 0.37 & 0.07 & 1 & 0.6 & 1 & 0.83 & 0.9 & 0.97 & 1\\
6 & 0.4 & 0.7 & 0.42 & 0.12 & 1 & 0.6 & 1 & 0.83 & 0.67 & 0.83 & 1\\
7 & 0 & 0.7 & 0.3 & 0 & 1 & 0.6 & 1 & 0.83 & 0.45 & 0.7 & 1\\
8 & 0 & 0.7 & 0.37 & 0.07 & 1 & 0.6 & 1 & 0.83 & 0.9 & 0.97 & 1\\
9 & 0 & 0.7 & 0.42 & 0.12 & 1 & 0.6 & 1 & 0.83 & 0.67 & 0.83 & 1\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Wygenerowane podsumowania}
\end{center}
\end{table}

\subsection{Podsumowania typu 2}

Użyta w przykładowych podsumowaniach typu 2 funkcja przynależności \emph{Type2TriangularIntervalMembershipFunction} to funkcja, która za funkcję przynależności pierwszego rzędu przyjmuje funkcję trójkątną, natomiast drugiego rzędu -- funkcję prostokątną o określonej szerokości i osi umiejscowionej na linii funkcji przynależności pierwszego rzędu.

\subsubsection{Kwantyfikatory}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l|l|}
\hline
Kwantyfikator & Funkcja przynależności\\ \hline
minority & Triangular(0.0, 0.2, 0.4)\\
about half & Triangular(0.3, 0.5, 0.7)\\
majority & Triangular(0.6, 0.8, 1.0)\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Kwantyfikatory użyte w podsumowaniu}
\end{center}
\end{table}

\subsubsection{Sumaryzatory}

\textbf{Zmienna lingwistyczna TEMPERATURA}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l|l|}
\hline
Sumaryzator & Funkcja przynależności\\ \hline
average & Type2TriangularIntervalMembershipFunction(10.0, 15.0, 20.0, 0.6)\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Sumaryzatory dla zmiennej lingwistycznej TEMPERATURA}
\end{center}
\end{table}

\subsubsection{Kwalifikatory}

\textbf{Zmienna lingwistyczna HUMIDITY}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l|l|}
\hline
Kwalifikator & Funkcja przynależności\\ \hline
average & Type2TriangularIntervalMembershipFunction(40.0, 60.0, 80.0, 0.8)\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Kwalifikatory dla zmiennej lingwistycznej HUMIDITY}
\end{center}
\end{table}

\subsubsection{Wygenerowane podsumowania}

\begin{enumerate}
\item about half records that are/have average humidity are/have average temperature
\item minority records that are/have average humidity are/have average temperature
\item majority records that are/have average humidity are/have average temperature
\end{enumerate}

\begin{table}[H]
\begin{center}
\begin{tabular}{|l||l||l|l|l|l|l|l|l|l|l|l|}
\hline
Lp. & T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9 & T10 & T11\\ \hline
1 & 0 & 0 & 0.92 & 0.08 & 1 & 0.6 & 1 & 0.39 & 0 & 0.64 & 1\\
2 & 0 & 0 & 0.92 & 0.08 & 1 & 0.6 & 1 & 0.39 & 0 & 0.64 & 1\\
3 & 0.92 & 0 & 0.92 & 0.08 & 1 & 0.6 & 1 & 0.39 & 0 & 0.64 & 1\\
\hline
\end{tabular}
\label{tab:tab1}
\caption{Wygenerowane podsumowania}
\end{center}
\end{table}

\begin{thebibliography}{0}
  \bibitem{google} Niewiadomski A.
    \textsl{Methods for the Linguistic Summarization of Data: Applications of Fuzzy Sets and Their Extensions}, Exit, Warszawa 2008
\end{thebibliography}
\end{document}
